#!/bin/sh

\. ../../../nvm.sh

FILE="${NVM_DIR}/default-packages"

die () { echo "$@" ; cleanup ; exit 1; }
setup () {
  if [ -f "${FILE}" ]; then
    ORIG_DEFAULT_PACKAGES=$(cat "${FILE}")
    mkdir -p ./tmp/ ||:
    mv "${FILE}" ./tmp/default-packages ||:
  fi
  touch "${FILE}"
}
cleanup () {
  if [ "${ORIG_DEFAULT_PACKAGES}" != "" ]; then
    rm -rf ./tmp/
    echo "${ORIG_DEFAULT_PACKAGES}" > "${FILE}"
  else
    rm "${FILE}"
  fi
}

setup

cat > "${FILE}" << EOF
rimraf
object-inspect@1.0.2

# commented-package

stevemao/left-pad
EOF

DEFAULT_PKGS="$(nvm_get_default_packages)"
EXPECTED_PKGS='rimraf object-inspect@1.0.2 stevemao/left-pad'
[ "${DEFAULT_PKGS}" = "${EXPECTED_PKGS}" ] || die "1: expected default packages >${EXPECTED_PKGS}<; got >${DEFAULT_PKGS}<"

cleanup

setup

cat > "${FILE}" << EOF
rimraf
not~a~package~name
mkdirp
EOF

DEFAULT_PKGS="$(nvm_get_default_packages)"
EXPECTED_PKGS='rimraf not~a~package~name mkdirp'
[ "${DEFAULT_PKGS}" = "${EXPECTED_PKGS}" ] || die "2: expected default packages >${EXPECTED_PKGS}<; got >${DEFAULT_PKGS}<"

cleanup

setup

cat > "${FILE}" << EOF
rimraf
not~a~package~name
mkdirp
EOF
printf %s "$(cat "${FILE}")" > "${FILE}" # strip trailing newline

DEFAULT_PKGS="$(nvm_get_default_packages)"
EXPECTED_PKGS='rimraf not~a~package~name mkdirp'
[ "${DEFAULT_PKGS}" = "${EXPECTED_PKGS}" ] || die "3: expected default packages >${EXPECTED_PKGS}<; got >${DEFAULT_PKGS}<"

cleanup

setup

cat > "${FILE}" << EOF
object-inspect @ 1.0.2
rimraf
EOF

DEFAULT_PKGS="$(nvm_get_default_packages 2>&1 >/dev/null)"
EXPECTED_PKGS="Only one package per line is allowed in \`${FILE}\`. Please remove any lines with multiple space-separated values."
[ "${DEFAULT_PKGS}" = "${EXPECTED_PKGS}" ] || die "4: expected default packages >${EXPECTED_PKGS}<; got >${DEFAULT_PKGS}<"

cleanup

setup

rm -rf "${FILE}"

DEFAULT_PKGS="$(nvm_get_default_packages)"
EXPECTED_PKGS=''
[ "${DEFAULT_PKGS}" = "${EXPECTED_PKGS}" ] || die "5: expected default packages >${EXPECTED_PKGS}<; got >${DEFAULT_PKGS}<"

touch "${FILE}"

cleanup
